/*




*/
#pragma once

#include <cmath>

class Vector3
{
public:

    float x;
    float y;
    float z;

    Vector3(void)
    {
        x = 0.0f;
        y = 0.0f;
        z = 0.0f;
    }

    Vector3(float x_, float y_, float z_);
    void Set(float x_, float y_, float z_);
    float length(void);
    void normalize(void);

    // Static utility methods
    static float distance(const Vector3 &v1, const Vector3 &v2);
    static float dotProduct(const Vector3 &v1,  const Vector3 &v2 );
    static Vector3 crossProduct(const Vector3 &v1, const Vector3 &v2);

    // Operators...
    Vector3 operator + (const Vector3 &other);
    Vector3 operator - (const Vector3 &other);
    Vector3 operator * (const Vector3 &other);
    Vector3 operator / (const Vector3 &other);

    Vector3 operator * (const float scalar);
    friend Vector3 operator * (const float scalar, const Vector3 &other);
    
    Vector3& operator = (const Vector3 &other);
    Vector3& operator += (const Vector3 &other);
    Vector3& operator -= (const Vector3 &other);

    Vector3 operator + (void) const;
    Vector3 operator - (void) const;
};
